package com.company.ljh.medium;
/**
 * 153.给你二叉树的根节点 root 和一个整数目标和 targetSum ，找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。
 *
 * 叶子节点 是指没有子节点的节点。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/er-cha-shu-zhong-he-wei-mou-yi-zhi-de-lu-jing-lcof
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */

import com.company.ljh.utils.TreeNode;

import java.util.ArrayList;
import java.util.List;

/**
 * @description:
 * @projectName:leet_code
 * @see:com.company.ljh.medium
 * @author:ljh
 * @createTime:2022/6/22 17:47
 * @version:1.0
 */
public class 二叉树中和为某一值的路径 {
    public List<List<Integer>> pathSum(TreeNode root, int target) {
        List<List<Integer>> result = new ArrayList();
        if(root == null){
            return result;
        }
        find(result,root,target,new ArrayList<Integer>(),0);
        return result;
    }
    private void find(List<List<Integer>> result, TreeNode node, int target, List<Integer> data , int sum){
        data.add(node.val);
        sum += node.val;
        if(sum == target && node.left == null &&node.right == null){
            result.add(data);
            return;
        }
        if(node.left != null){
            find(result,node.left,target,new ArrayList(data),sum);
        }
        if(node.right != null){
            find(result,node.right,target,new ArrayList(data),sum);
        }

    }
}
